/*  
	------------------------------------------------------------------------
	 NQ Core Library
	
	 Homepage: http://www.awzhome.de/
	------------------------------------------------------------------------
	
	This Source Code Form is subject to the terms of the Mozilla Public
	License, v. 2.0. If a copy of the MPL was not distributed with this
	file, You can obtain one at http://mozilla.org/MPL/2.0/.
   
	The Original Code is code of NQ Core Library.

	The Initial Developer of the Original Code is Andreas Weizel.
	Portions created by the Initial Developer are
	Copyright (C) 2012 Andreas Weizel. All Rights Reserved.
	
	Contributor(s): (none)
	
	------------------------------------------------------------------------
*/

namespace AWZhome.NQ.Core
{
	/// <summary>
	/// Interface for a class that saves information about a component.
	/// </summary>
	public interface INQComponentInfo
	{
		/// <summary>
		/// Returns the internal name of the component.
		/// </summary>
		string Name
		{
			get;
		}

		/// <summary>
		/// Returns the display name of the component.
		/// </summary>
		string DisplayName
		{
			get;
		}

		/// <summary>
		/// Returns the URL of a description file used to update the component using NQ Updater.
		/// </summary>
		string UpdaterURL
		{
			get;
		}

		/// <summary>
		/// Returns the copyright information.
		/// </summary>
		string Copyright
		{
			get;
		}

		/// <summary>
		/// Indicates if an assembly is only a part of a component. This is used internally
		/// and will usually always return <c>true</c>.
		/// </summary>
		bool IsComponentPart
		{
			get;
		}

		/// <summary>
		/// Returns the namespace access key for the non-translated resources of the component.
		/// </summary>
		string NonTranslatedResKey
		{
			get;
		}

		/// <summary>
		/// Returns the namespace of the non-translated resources of the component.
		/// </summary>
		string NonTranslatedRes
		{
			get;
		}

		/// <summary>
		/// Returns the resource path of the non-translated resources of the component in the assembly.
		/// </summary>
		string NonTranslatedPath
		{
			get;
		}

		/// <summary>
		/// Returns the namespace access key for the translated resources of the component.
		/// </summary>
		string TranslatedResKey
		{
			get;
		}

		/// <summary>
		/// Returns the namespace of the translated resources of the component.
		/// </summary>
		string TranslatedRes
		{
			get;
		}

		/// <summary>
		/// If <c>True</c> the component is not loaded automatically when it's present in the bin directory.
		/// It can be loaded explicitly by setting the <c>-ca</c> command-line parameter.
		/// </summary>
		bool NoAutoLoad
		{
			get;
		}

		/// <summary>
		/// Returns all loading requirements for the component represented by an array
		/// of <see cref="AWZhome.NQ.Core.INQComponentRequirement">INQComponentRequirement</see>
		/// objects.
		/// </summary>
		INQComponentRequirement[] Requires
		{
			get;
		}

		/// <summary>
		/// Returns the version constraints that indicate which version the component is
		/// also compatible to. If the required version of a component is not found this
		/// is used to identify a compatible version.
		/// </summary>
		INQComponentRequirement[] Compatibility
		{
			get;
		}

		/// <summary>
		/// Returns the <see cref="System.Reflection.Assembly">Assembly</see> object for the
		/// main assembly of the component.
		/// </summary>
		System.Reflection.Assembly MainAssembly
		{
			get;
		}

		/// <summary>
		/// Returns the <see cref="System.Reflection.Assembly">Assembly</see> objects of
		/// all component part assemblies for the current component.
		/// </summary>
		System.Reflection.Assembly[] PartAssemblies
		{
			get;
		}

		/// <summary>
		/// Returns the component's version.
		/// </summary>
		System.Version Version
		{
			get;
		}

		/// <summary>
		/// Returns the displayable version of the component as a string.
		/// </summary>
		string DisplayVersion
		{
			get;
		}

		/// <summary>
		/// Retrieves the category assigned to this service.
		/// The category sets in which environment this component should be loaded.
		/// </summary>
		NQHostMode Category
		{
			get;
		}

	}
}
